﻿/*
筛排处理 
Time Limit:1000MS  Memory Limit:32768K


Description:
明明想在学校中请一些同学一起做一项问卷调查，为了实验的客观性，
他先用计算机生成了N个1到1000之间的随机整数（N<=100），对于其中重复的数字，
只保留一个，把其余相同的数去掉，不同的数对应着不同的学生的学号。
然后再把这些数从小到大排序，按照排好的顺序去找同学做调查。
请你协助明明完成“去重”与“排序”的工作。

Input:
每组输入数据的第一行含有一个正整数N，表示后面行中有N个随机整数。
若N=0，表示处理结束。 
Output:
对应每组输入数据，输出一组数据，该数据由单独一行开头，内含一个N，
表示后面有N个排好序的整数，其整数每十个一排，整数之间空一格。
每组输出数据之间空一行。 
Sample Input:
12
2 4 6 17 20 40 43 45 60 64 85 98
17
35 75 40 61 56 21 85 61 50 83 52 22 44 68 51 80 38
0
Sample Output:
12
2 4 6 17 20 40 43 45 60 64
85 98

16
21 22 35 38 40 44 50 51 52 56
61 68 75 80 83 85
*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	enum{line_size=10};
	
	bool first_time=true;

	for (unsigned n; cin>>n;)
	{		
		if(!first_time)
			cout<<endl;
		first_time=false;

		if(0==n)
		{
			cout<<0<<endl<<endl;
			break;
		}
		vector<int> v;
		v.reserve(n);
		while (n--)
		{
			int num;
			cin>>num;
			v.push_back(num);
		}
		sort(v.begin(), v.end());
		vector<int>::iterator it=unique(v.begin(), v.end());
		v.resize(it-v.begin());

		vector<int>::size_type i=0, size=v.size();
		cout<<size<<endl;
		cout<<v[i];
		for (i++; i<size; i++)
		{			
			if(i%line_size)
				cout<<" ";
			else
				cout<<"\n";	
			cout<<v[i];		
		}
		cout<<endl;	
	}


	return 0;
}